package com.imooc.coupon.service;

import com.imooc.coupon.entity.Coupon;
import com.imooc.coupon.exception.CouponException;

import java.util.List;

/**
 * <h1>Redis 相关的操作服务接口定义</h1>
 * 1. 用户的三个状态优惠卷 Cache 相关操作
 * 2. 优惠卷模板生成的优惠卷码 Cache  操作
 * @Author: crowsjian
 * @Date: 2020/6/16 21:29
 */
public interface IRedisService {
    /**
     * <h2>根据userId 和 状态 找到缓存的优惠卷列表数据</h2>
     * @param userId 用户 id
     * @param status 优惠卷状态 {@link com.imooc.coupon.constant.CouponStatus}
     * @return {@link Coupon}s，注意，可能会返回 null,代表没有过记录
     */
    List<Coupon> getCacheCoupons(Long userId, Integer status);

    /**
     * <h2>保存空的优惠卷列表到缓存中</h2>
     * @param userId 用户 id
     * @param status 优惠卷状态列表
     */
    void saveEmptyCouponListToCache(Long userId, List<Integer> status);

    /**
     * <h2>尝试从 Cache 中获取一个优惠卷码</h2>
     * @param templateId 优惠卷模板主键
     * @return 优惠卷吗
     */
    String tryToAquireCouponCodeFromCache(Integer templateId);

    /**
     * <h2>将优惠卷保存到 cache 中</h2>
     * @param userId 用户 id
     * @param coupons {@link Coupon}s
     * @param status 优惠卷状态
     * @return 保存成功的个数
     * @throws CouponException
     */
    Integer addCouponToCache(Long userId,List<Coupon> coupons,
                             Integer status) throws CouponException;
}
